#ifndef PATIENTMANAGER_H
#define PATIENTMANAGER_H

#include <string>
#include <vector>
#include <optional>  // c++17
#include <nlohmann/json.hpp>

// 患者信息结构体
struct PeopleInfo {
    int id;
    std::string name;
    std::string region;
};

// 患者管理类
class PatientManager {
public:
    // 构造函数
    PatientManager(const std::string& directory);

    // 初始化函数：读取所有患者信息
    void initialize();

    // 根据 ID 查找患者信息
    std::optional<std::reference_wrapper<const PeopleInfo>> findById(int id) const;

    // 根据 Name 查找患者信息
    std::optional<std::reference_wrapper<const PeopleInfo>> findByName(const std::string& name) const;

    // 更新患者信息(重新将硬盘中的病人信息读入内存缓冲区)
    void update();

    // 添加患者信息到缓冲区
    void addPatient(const PeopleInfo& info);

    // 将缓冲区的所有患者信息写入文件夹
    void saveAllPatients();

    // 用于进行迭代
    const std::vector<PeopleInfo>& getAllPatients() const {
        return patients_;
    }

private:
    std::string directory_; // 患者文件夹所在的目录
    std::vector<PeopleInfo> patients_; // 存储所有患者信息的容器

    // 写入单个患者信息到文件夹
    void writePatientInfo(const PeopleInfo& info) const;

    // 读取单个患者信息
    bool readPatientInfo(const std::string& folderPath, int id, PeopleInfo& info) const;
};

#endif // PATIENTMANAGER_H
